//package com.gy.service.impl;
//
//import com.gy.entity.File.ChunkStatus;
//import com.gy.entity.File.UploadStatus;
//import com.gy.mapper.ChunkStatusMapper;
//import com.gy.mapper.UploadStatusMapper;
//import com.gy.service.UploadStatusService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
//@Service
//public class UploadStatusServiceImpl implements UploadStatusService {
//
//    @Autowired
//    private UploadStatusMapper uploadStatusMapper;
//
//    @Autowired
//    private ChunkStatusMapper chunkStatusMapper;
//
//    @Override
//    @Transactional
//    public void saveUploadStatus(String fileHash, String fileName, int totalChunks, List<Integer> uploadedChunks) {
//        // 先检查是否已存在上传状态
//        UploadStatus existingStatus = uploadStatusMapper.selectByFileHash(fileHash);
//
//        if (existingStatus == null) {
//            // 创建新的上传状态
//            UploadStatus status = new UploadStatus();
//            status.setFileHash(fileHash);
//            status.setFileName(fileName);
//            status.setTotalChunks(totalChunks);
//            status.setCreateTime(new Date());
//            status.setUpdateTime(new Date());
//
//            uploadStatusMapper.insert(status);
//        } else {
//            // 更新现有上传状态
//            existingStatus.setFileName(fileName);
//            existingStatus.setTotalChunks(totalChunks);
//            existingStatus.setUpdateTime(new Date());
//
//            uploadStatusMapper.update(existingStatus);
//        }
//
//        // 更新分片状态
//        for (Integer chunkIndex : uploadedChunks) {
//            updateChunkStatus(fileHash, chunkIndex, true);
//        }
//    }
//
//    @Override
//    public UploadStatus getUploadStatus(String fileHash) {
//        return uploadStatusMapper.selectByFileHash(fileHash);
//    }
//
//    @Override
//    public void updateChunkStatus(String fileHash, int chunkIndex, boolean status) {
//        ChunkStatus existingChunk = chunkStatusMapper.selectByFileHashAndChunkIndex(fileHash, chunkIndex);
//
//        if (existingChunk == null) {
//            // 创建新的分片状态
//            ChunkStatus chunkStatus = new ChunkStatus();
//            chunkStatus.setFileHash(fileHash);
//            chunkStatus.setChunkIndex(chunkIndex);
//            chunkStatus.setUploadStatus(status ? 1 : 0); // 将 boolean 转换为 Integer
//            chunkStatus.setUploadTime(new java.sql.Timestamp(new Date().getTime()));
//
//            chunkStatusMapper.insert(chunkStatus);
//        } else if (!existingChunk.getUploadStatus().equals(status ? 1 : 0)) { // 使用 equals 进行比较
//            // 更新现有分片状态
//            existingChunk.setUploadStatus(status ? 1 : 0); // 将 boolean 转换为 Integer
//            existingChunk.setUploadTime(new java.sql.Timestamp(new Date().getTime()));
//
//            chunkStatusMapper.update(existingChunk);
//        }
//    }
//
//    @Override
//    public List<Integer> getUploadedChunks(String fileHash) {
//        List<ChunkStatus> chunkStatuses = chunkStatusMapper.selectByFileHash(fileHash);
//        List<Integer> uploadedChunks = new ArrayList<>();
//
//        for (ChunkStatus status : chunkStatuses) {
//            if (status.getUploadStatus() != null && status.getUploadStatus() == 1) {
//                uploadedChunks.add(status.getChunkIndex());
//            }
//        }
//
//        return uploadedChunks;
//    }
//
//    @Override
//    @Transactional
//    public void deleteUploadStatus(String fileHash) {
//        // 删除上传状态
//        uploadStatusMapper.deleteByFileHash(fileHash);
//
//        // 删除分片状态
//        chunkStatusMapper.deleteByFileHash(fileHash);
//    }
//
//    @Override
//    public boolean isChunkUploaded(String fileHash, int chunkIndex) {
//        // 查询分片状态
//        ChunkStatus chunkStatus = chunkStatusMapper.selectByFileHashAndChunkIndex(fileHash, chunkIndex);
//
//        // 判断分片是否已上传
//        return chunkStatus != null && chunkStatus.getUploadStatus() != null && chunkStatus.getUploadStatus() == 1;
//    }
//
//    // ✅ 新增 allChunksUploaded 方法的实现
//    @Override
//    public boolean allChunksUploaded(String fileHash, int totalChunks) {
//        List<Integer> uploadedChunks = getUploadedChunks(fileHash);
//        return uploadedChunks != null && uploadedChunks.size() == totalChunks;
//    }
//}
